luci-base: form.js: reset parent maps on returning from nested section modal
authorJo-Philipp Wich <[email protected]>
Mon, 16 May 2022 09:49:28 +0000 (11:49 +0200)
committerJo-Philipp Wich <[email protected]>
Mon, 1 Aug 2022 09:57:42 +0000 (11:57 +0200)
The nested section modal might have changed values also covered/displayed by
the parent map, so ensure to reload all parent maps in the current modal
view stack to ensure that no stale values are shown on return.

Signed-off-by: Jo-Philipp Wich <[email protected]>
(cherry picked from commit 0c81e25faa9ff9cb6edec477d56145d70be87cf3)

modules/luci-base/htdocs/luci-static/resources/form.js

index 98d934205766ad407c97c9845af1d23957952f1b..fc7ddb8a8ae5795216729fa40b8c4836a10b1ff4 100644 (file)
@@ -2995,10 +2995,20 @@ var CBITableSection = CBITypedSection.extend(/** @lends LuCI.form.TableSection.p
 
        /** @private */
        handleModalCancel: function(modalMap, ev) {
-               var prevNode = this.getPreviousModalMap();
+               var prevNode = this.getPreviousModalMap(),
+                   resetTasks = Promise.resolve();
 
                if (prevNode) {
-                       var heading = prevNode.parentNode.querySelector('h4');
+                       var heading = prevNode.parentNode.querySelector('h4'),
+                           prevMap = dom.findClassInstance(prevNode);
+
+                       while (prevMap) {
+                               resetTasks = resetTasks
+                                       .then(L.bind(prevMap.load, prevMap))
+                                       .then(L.bind(prevMap.reset, prevMap));
+
+                               prevMap = prevMap.parent;
+                       }
 
                        prevNode.classList.add('flash');
                        prevNode.classList.remove('hidden');
@@ -3015,7 +3025,7 @@ var CBITableSection = CBITypedSection.extend(/** @lends LuCI.form.TableSection.p
                        ui.hideModal();
                }
 
-               return Promise.resolve();
+               return resetTasks;
        },
 
        /** @private */